package zisu.qgs.lambda.lambda;

/**
 * @Author: 蔡翔
 * @Date: 2019/10/2 7:52
 * @Version 1.0
 */
// 这里要求 这个接口只能有一个 方法，不然 下面lambda无法指定到哪一个里面去。这就是函数接口（针对函数式编程的）
// 加入这个注解后，Interface1只能声明一个方法（要实现的方法）并不是只能有一个方法，这其实是设计模式里面的单一责任制（每个人的责任尽量小）
@FunctionalInterface
interface Interface1{
    int doubleNum(int i);

    default int add(int a,int b){
        return a+b;
    }
}

@FunctionalInterface
interface Interface2{
    int doubleNum(int i);

    default int add(int a,int b){
        return a+b;
    }
}

@FunctionalInterface
interface Interface3 extends Interface1,Interface2{
    @Override
    default int add(int a,int b){
        return Interface1.super.add(a,b);
    }
}

public class LambdaDemo {

    public static void main(String[] args) {
        Interface1 i1 = (i) -> i*2;  // 看到idea 左边标记，lambda 其实就是对接口实现。
        // 因为只有一个参数，所以这里 i不需要括号。
        Interface1 i2 = i -> i*2;
        Interface1 i3 = (int i) -> i*2;
        // 如果有多行可以写成这样。
        Interface1 i4 = (int i) -> {
            System.out.println("------------");
            return i*2;
        };
        System.out.println(i1.add(3,7));
    }

}
